
-- 获取token并判定是否中奖
-- 返回值：-1=可用抽奖次数不足，-2=奖品被抽光，0=有令牌但你未中奖，else=中奖，返回了拿到的令牌
redis.log(redis.LOG_NOTICE, "-- 开始抽奖操作 ：gameId,userId,maxGoal=" .. KEYS[1] .. ',' .. KEYS[2] .. ',' .. KEYS[3])--这行是 “记日志”，相当于在系统里写一句记录：“开始抽奖啦！活动 ID 是 KEYS [1]，用户 ID 是 KEYS [2]，最多能中 KEYS [3] 次奖哦”。
--（KEYS [1] 就是前面 Java 代码里传的 gameId，KEYS [2] 是 userId，KEYS [3] 是 maxCount，相当于三个 “参数”）

-- 用户已中奖次数
local usergoal = redis.call('get','user_hit_' .. KEYS[1] .. '_' .. KEYS[2])--这行是 “查数据”：从 Redis 里查一个叫 “user_hit_活动 ID_用户 ID” 的东西，结果存在 usergoal 里。
--这个东西其实就是 “你在这个活动里已经中过几次奖了”。比如活动 ID 是 100，用户 ID 是 200，就查 “user_hit_100_200” 的值。

-- 中奖次数大于最大允许次数，返回-1    --“判断你是不是还能抽奖”
if usergoal ~= false and tonumber(KEYS[3]) ~=0 and tonumber(usergoal) >= tonumber(KEYS[3]) then--如果前面查到的 “已中奖次数”（usergoal）存在（不是 false），并且 “最多允许中奖次数”（KEYS [3]）不是 0，并且 “已中奖次数” 已经大于等于 “最多允许次数”，
    redis.log(redis.LOG_NOTICE, "-- 中奖次数超出上限，tonumber(usergoal) > tonumber(KEYS[3]) , return -1")--那就记一条日志 “你中奖次数超上限啦”，然后返回 - 1（告诉程序：这人不能再抽了）。
    return -1
end

-- 从左侧获取一个token
local token = redis.call('lpop', 'game_tokens_' .. KEYS[1])--这行是 “拿奖品令牌”：从 Redis 里一个叫 “game_tokens_活动 ID” 的队列里，从最左边拿一个 “令牌”（token）。
                                                             --这个队列就相当于 “奖品池”，里面存着所有能中奖的令牌，lpop 就是 “从池子里拿出一个”。

-- 当前系统时间
local curtime = redis.call('TIME')[1]--这行是 “看当前时间”：调用 Redis 的 TIME 命令拿当前系统时间，取第一部分（秒数）存在 curtime 里，
redis.log(redis.LOG_NOTICE, "-- 当前时间，curtime  = " .. curtime)--再记一条日志 “现在时间是 curtime 秒”。


if token ~= false then--这是 “判断有没有拿到令牌”：如果刚才从奖品池里拿到了令牌（token 不是 false），就进入下面的逻辑。
    redis.log(redis.LOG_NOTICE, "-- 获取到令牌，token = " .. token)
    -- token是毫秒，并且尾部加了3位随机数，curtime是秒，相差6位
    if tonumber(token)/1000 > curtime*1000 then--如果 “令牌的有效时间” 大于 “当前时间”，说明这个令牌还没到能用的时候（无效）
        redis.log(redis.LOG_NOTICE, "-- 令牌无效，tonumber(token)/1000 > curtime*1000 , return 0")
        redis.call('lpush', 'game_tokens_' .. KEYS[1], token)
        return 0
    -- 否则表示token有效，中奖，用户中奖数+1，返回token令牌
    else
        local hit = redis.call('incr','user_hit_' .. KEYS[1] .. '_' .. KEYS[2])--给 “user_hit_活动 ID_用户 ID” 这个数加 1（incr 就是 “加 1”），相当于 “你的中奖次数又多了 1 次”，结果存在 hit 里。
        redis.log(redis.LOG_NOTICE, "-- 令牌有效，中奖！ return token,userGoal=" .. tonumber(hit))--记日志 “令牌有效，中奖啦！现在你总共中了 hit 次”
        return tonumber(token)--返回这个令牌（告诉程序：中奖了，这是你的中奖凭证）。
    end
else
    -- 取不到token，表示抽光了，返回-2
    redis.log(redis.LOG_NOTICE, "-- 取不到token，奖品已抽光，返回-2")
    return -2
end